#ifndef QLSAVWIDGET_H
#define QLSAVWIDGET_H

#include <QWidget>
#include <QSlider>
#include <QLabel>
#include <QTimer>
#include <QPushButton>
#include <QPropertyAnimation>
#include <QGraphicsOpacityEffect>

#include "qlsavplayer.h"
#include "qlsvolumetooltipwidget.h"

namespace Ui {
class QLsAVWidget;
}

class QLsAVWidget : public QWidget
{
	Q_OBJECT

public:
	enum PlayerOrder
	{
		PlayerOrder_SingleCycle,		/* 单循环 */
		PlayerOrder_OrderCycle,			/* 顺序循环 */
		PlayerOrder_Nor					/* 不循环 */
	};

public:
	explicit QLsAVWidget(QWidget *parent = nullptr);
	~QLsAVWidget();

	/* 路径 */
	QString AVUrl() const;
	void setAVUrl(const QString &AVUrl);

	/* 播放顺序 */
	PlayerOrder playerOrder() const;
	void setPlayerOrder(const PlayerOrder &playerOrder);

protected:
	QImage m_showImage;		/* 记录当前的图像 */

	/* 绘图事件重载 */
	void paintEvent(QPaintEvent *);
	/* 事件过滤器 */
	bool eventFilter(QObject *watched, QEvent *event);
	/* 拖拽事件重载 - 鼠标松开时执行 */
	void dropEvent(QDropEvent *event);
	/* 拖拽事件重载 - 拖拽进来时执行 */
	void dragEnterEvent(QDragEnterEvent *event);

private:
	/* Sec转hh:mm:ss */
	QString SecToTimeStr(qint64 sec);
	/* 音量同步显示 */
	void ShowVolumeToolTip(int volume);
	/* 界面初始化 */
	void HomeInit();

private slots:
	/* 静音 */
	void on_volumeBtn_clicked();
	/* 播放/暂停 */
	void on_playBtn_clicked();
	/* 获取一帧图像 的槽函数 */
	void slotGetOneFrame(QImage img);
	/* 视频总时长变化 的槽函数 */
	void slotTotalTimeChange(qint64 uSec);
	/* 当前时间变化 的槽函数 */
	void slotCurTimeChange(int sec);
	/* 状态变化 的信号 */
	void slotStatusChange(QLsAVPlayer::QLsPlayerStatus status);
	/* 全屏 */
	void on_fullBtn_clicked();
	/* 打开本地视频 */
	void on_openBtn_clicked();
	/* 音量变化 [0, 1] */
	void slotVolumeChange(float volume);
	/* 显示/隐藏 侧边栏 */
	void slotShowSidebarBtnClicked();
	/* 单击事件 的槽函数 */
	void slotClicked();

private:
	Ui::QLsAVWidget *ui;
	QLsAVPlayer *m_avPlayer;

	PlayerOrder m_playerOrder;						/* 播放顺序 */

	/* ui->showWidget */
	bool m_bPress;
	bool m_bMove;
	bool m_bFull;									/* 全屏 */
	QPushButton *m_showSidebarBtn;					/* 显示侧边栏 */
	QTimer *m_clickedTimer;							/* 单双击冲突定时器 */
	Qt::MouseButtons m_clickedMouseButton;			/* 单击按钮事件类型 */
	bool m_bKeyPress;

	/* 进度条 */
	QTimer *m_curTimeTimer;

	/* 音量 */
	QLsVolumeToolTipWidget *m_volumeToolTipWidget;
	QLabel *m_volumeLabel;
	QTimer *m_volumeLabelTimer;

	/* ui->controlWidget */
	QTimer *m_controlWidgetTimer;
	QGraphicsOpacityEffect *m_controlWidgetOpacity;
	QPropertyAnimation *m_controlWidgetAnimation;   /* 控制底部控制控件的出现和隐藏 */

	/* qss */
	QString m_qssPlay;							/* 播放 */
	QString m_qssPlayHover;
	QString m_qssPause;							/* 暂停 */
	QString m_qssPauseHover;
	QString m_qssVolume;						/* 音量 */
	QString m_qssVolumeHover;
	QString m_qssMute;							/* 静音 */
	QString m_qssMuteHover;
	QString m_qssFullExpand;					/* 全屏-展开 */
	QString m_qssFullExpandHover;
	QString m_qssFullShrink;					/* 全屏-收缩 */
	QString m_qssFullShrinkHover;
	QString m_qssSidebarRight;					/* 侧边栏-右-收缩 */
	QString m_qssSidebarRightHover;
	QString m_qssSidebarLeft;					/* 侧边栏-左-展开 */
	QString m_qssSidebarLeftHover;

	QString m_playBtnQss_play;					/* 播放按钮qss样式 */
	QString m_playBtnQss_pause;
	QString m_volumeBtnQss_volume;				/* 静音按钮qss样式 */
	QString m_volumeBtnQss_mute;
	QString m_fullBtnQss_full;					/* 全屏按钮 */
	QString m_fullBtnQss_normal;
	QString m_showSidebarBtnQss_right;			/* 显示侧边栏按钮 */
	QString m_showSidebarBtnQss_left;
};

#endif // QLSAVWIDGET_H
